﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StandAlone
{
    public partial class frm_Marcas : Form
    {
        public frm_Marcas()
        {
            InitializeComponent();
        }

        private void Marcas_Load(object sender, EventArgs e)
        {
            Cargar_Marcas();
        }

        private void CargarEnTextBoxs()
        {
            DataSet ds = new DataSet();
            string Id_Marca = cmb_Marcas.SelectedValue.ToString();

            string Consulta = "SELECT Id_Marca as Id, Marca as Marca, Eliminado as Eliminado"
                            + " FROM Marcas WHERE Id_Marca = '" + Id_Marca + "'";

            ds = Funciones.Read_DataBase(Consulta);

            txt_Id.Text = ds.Tables[0].Rows[0]["Id"].ToString();
            txt_Marca.Text = ds.Tables[0].Rows[0]["Marca"].ToString();

            if (ds.Tables[0].Rows[0]["Eliminado"].ToString() == "True")
                chkb_Eliminado.Checked = true;
            else
                chkb_Eliminado.Checked = false;
        }

        private void Cargar_Cod_Marca_Nueva()
        {
            string Cod_Marca;
            int Cod_Marca_Numerico;
            DataSet ds = new DataSet();
            ds = Funciones.Read_DataBase("SELECT MAX(Id_Marca) as Id_Marca FROM Marcas");
            Cod_Marca = ds.Tables[0].Rows[0]["Id_Marca"].ToString().Trim();
            Cod_Marca = Cod_Marca.Remove(0, 1);
            Cod_Marca_Numerico = Convert.ToInt32(Cod_Marca.Trim());
            Cod_Marca_Numerico++;
            Cod_Marca = Cod_Marca_Numerico.ToString().PadLeft(4, '0');
            txt_Id.Text = 'M' + Cod_Marca;
        }

        private void Limpiar_Formulario()
        {

            chkb_Eliminado.Checked = false;
            txt_Marca.Text = "";
        }

        private bool Buscar_Si_Existe_Marca()
        {
            DataSet ds = new DataSet();
            ds = Funciones.Read_DataBase("SELECT Count (Id_Marca) AS Cantidad_Marcas FROM Marcas" 
                        + " WHERE Marcas.Id_Marca = '" + txt_Id.Text + "'");
            if (Convert.ToInt32(ds.Tables[0].Rows[0]["Cantidad_Marcas"].ToString().Trim()) == 0)
                return false;
            else
                return true;
        }

        private void Agregar_Registro()
        {
            DataSet ds = new DataSet();
            ds = Funciones.Read_DataBase("INSERT INTO Marcas (Id_Marca, Marca, Eliminado)"
                    + " SELECT '" + txt_Id.Text.Trim() + "','" + txt_Marca.Text.Trim() + "'," + Convert.ToInt32(chkb_Eliminado.Checked));
        }

        private void Actualizar_Registro()
        {
            DataSet ds = new DataSet();
            ds = Funciones.Read_DataBase("UPDATE Marcas SET Id_Marca ='" + txt_Id.Text.Trim() + "', Marca = '" + txt_Marca.Text.Trim() + 
                 "', Eliminado = " + Convert.ToInt32(chkb_Eliminado.Checked) + "WHERE Id_Marca ='" + txt_Id.Text.Trim() + "'");
        }

        private void Cargar_Marcas()
        {
            Funciones.Cargar_Combo("SELECT Id_Marca,Marca FROM Marcas", "Id_Marca", "Marca", ref cmb_Marcas);
        }

        private bool Validar_Campos()
        {
            //Devuelve true si se Ingreso una Marca.
            if (txt_Marca.Text.Trim() == "")
            {
                MessageBox.Show("No ingresó Marca", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        private void cmb_Marcas_SelectedIndexChanged(object sender, EventArgs e)
        {
              if (cmb_Marcas.SelectedIndex != -1)
            {
                CargarEnTextBoxs();
            }
        }

        private void btn_Agregar_Nueva_Marca_Click(object sender, EventArgs e)
        {
            cmb_Marcas.SelectedIndex = -1;
            cmb_Marcas.Enabled = false;
            btn_Agregar_Nueva_Marca.Enabled = false;
            Cargar_Cod_Marca_Nueva();
            Limpiar_Formulario();
        }

        private void btn_Actualizar_Cambios_Click(object sender, EventArgs e)
        {
             if (Validar_Campos() == true)
            {
                if (Buscar_Si_Existe_Marca() == false)
                {
                    // NO EXISTE COD MARCA, SE CARGA NUEVO REGISTRO
                    Agregar_Registro();
                    MessageBox.Show("Marca Agregada con Éxito", "Agregar Nueva Marca", MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                    Limpiar_Formulario();
                    cmb_Marcas.Enabled = true;
                    cmb_Marcas.SelectedIndex = -1;
                    btn_Agregar_Nueva_Marca.Enabled = true;
                    Cargar_Marcas();
                }
                else
                {
                    // EXISTE COD MARCA, SE ACTUALIZA REGISTRO
                    if (Marca_Asociada_A_Articulo() == true && chkb_Eliminado.Checked == true)
                    { 
                        MessageBox.Show("No se puede eliminar está marca por que tiene artículos asociados a ella.", "Actualizar Marca", MessageBoxButtons.OK,
                            MessageBoxIcon.Error);
                        Limpiar_Formulario();
                        cmb_Marcas.SelectedIndex = -1;
                        Cargar_Marcas();
                    }
                    else
                    {
                        Actualizar_Registro();
                        MessageBox.Show("Marca Actualizada con Éxito", "Actualizar Marca", MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
                        Limpiar_Formulario();
                        cmb_Marcas.SelectedIndex = -1;
                        Cargar_Marcas();
                    }
                }
            }
        }

        private bool Marca_Asociada_A_Articulo()
        { 
            // DEVUELVE TRUE SI LA MARCA ESTÁ ASOCIADA A UNO A MÁS ARTÍCULO/S
            DataSet ds = new DataSet();
            ds = Funciones.Read_DataBase("SELECT COUNT(Articulos.Id_Articulo) AS Cantidad FROM Articulos WHERE Articulos.Id_Marca"
                + " = '" + txt_Id.Text.ToString() + "'");
            if (Convert.ToInt32(ds.Tables[0].Rows[0]["Cantidad"].ToString().Trim()) == 0)
                return false;
            else
                return true;
        }

        private void btn_Cancelar_Click(object sender, EventArgs e)
        {
            cmb_Marcas.Enabled = true;
            btn_Agregar_Nueva_Marca.Enabled = true;
            cmb_Marcas.SelectedIndex = 0;
        }

        private void btn_Cerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
